{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "任务：在Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集）进行分类器练习，需要提交代码文件，并给出必要的结果解释。\n",
    "1) 训练数据和测试数据分割（随机选择20%的数据作为测试集）；（10分）\n",
    "2) 适当的特征工程（及数据探索）;（10分）\n",
    "3) Logistic回归，并选择最佳的正则函数（L1/L2）及正则参数；（30分）\n",
    "4) 线性SVM，并选择最佳正则参数，比较与Logistic回归的性能，简单说明原因。（20分）\n",
    "5) RBF核的SVM，并选择最佳的超参数（正则参数、RBF核函数宽度）；（30分）\n",
    "数据说明：\n",
    "原始数据集地址：https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes\n",
    "数据集只有一个文件（diabetes.csv）：Pima Indians Diabetes Dataset 包括根据医疗记录的比马印第安人 5 年内糖尿病的发病情况，这是一个两类分类问题。每个类的样本数目数量不均等。一共有 768 个样本，每个样本有 8 个输入变量和 1 个输出变量。缺失值通常用零值编码。\n",
    "字段说明\n",
    "Pregnancies： 怀孕次数\n",
    "Glucose： 口服葡萄糖耐受试验中，2 小时的血浆葡萄糖浓度。\n",
    "BloodPressure： 舒张压（mm Hg）\n",
    "SkinThickness： 三头肌皮肤褶层厚度（mm）\n",
    "Insulin：2 小时血清胰岛素含量（μU/ ml）\n",
    "BMI： 体重指数（体重，kg /（身高，m）^ 2）\n",
    "DiabetesPedigreeFunction： 糖尿病家族史\n",
    "Age： 年龄（岁）\n",
    "Outcome： 输出变量/类别标签（0 或 1，出现糖尿病为 1, 否则为 0）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "#color = sns.color_palette()\n",
    "%matplotlib inline\n",
    "#对这个作业，下面这几句比较重要\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn import datasets\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import log_loss\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>763</th>\n",
       "      <td>10</td>\n",
       "      <td>101</td>\n",
       "      <td>76</td>\n",
       "      <td>48</td>\n",
       "      <td>180</td>\n",
       "      <td>32.9</td>\n",
       "      <td>0.171</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>764</th>\n",
       "      <td>2</td>\n",
       "      <td>122</td>\n",
       "      <td>70</td>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "      <td>36.8</td>\n",
       "      <td>0.340</td>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>765</th>\n",
       "      <td>5</td>\n",
       "      <td>121</td>\n",
       "      <td>72</td>\n",
       "      <td>23</td>\n",
       "      <td>112</td>\n",
       "      <td>26.2</td>\n",
       "      <td>0.245</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>766</th>\n",
       "      <td>1</td>\n",
       "      <td>126</td>\n",
       "      <td>60</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>30.1</td>\n",
       "      <td>0.349</td>\n",
       "      <td>47</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>767</th>\n",
       "      <td>1</td>\n",
       "      <td>93</td>\n",
       "      <td>70</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "      <td>30.4</td>\n",
       "      <td>0.315</td>\n",
       "      <td>23</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "763           10      101             76             48      180  32.9   \n",
       "764            2      122             70             27        0  36.8   \n",
       "765            5      121             72             23      112  26.2   \n",
       "766            1      126             60              0        0  30.1   \n",
       "767            1       93             70             31        0  30.4   \n",
       "\n",
       "     DiabetesPedigreeFunction  Age  Outcome  \n",
       "763                     0.171   63        0  \n",
       "764                     0.340   27        0  \n",
       "765                     0.245   30        0  \n",
       "766                     0.349   47        1  \n",
       "767                     0.315   23        0  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"diabetes.csv\",index_col=False)\n",
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "#数据基本信息\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pregnancies                 0\n",
       "Glucose                     0\n",
       "BloodPressure               0\n",
       "SkinThickness               0\n",
       "Insulin                     0\n",
       "BMI                         0\n",
       "DiabetesPedigreeFunction    0\n",
       "Age                         0\n",
       "Outcome                     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 查看是否有空值\n",
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "insulin的标准差很大，没事吧?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of occurrences')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#看下各类样本分布情况，是否均衡\n",
    "sns.countplot(data.Outcome)\n",
    "plt.xlabel('Outcome')\n",
    "plt.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看起来好像并没有特别不均衡，可不可以不进行特别处理?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9, 9)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#get the names of all the columns\n",
    "cols=data.columns \n",
    "\n",
    "# Calculates pearson co-efficient for all combinations，通常认为相关系数大于0.5的为强相关\n",
    "data_corr = data.corr().abs()\n",
    "data_corr.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(figsize=(13, 9))\n",
    "sns.heatmap(data_corr,annot=True)\n",
    "\n",
    "# Mask unimportant features\n",
    "sns.heatmap(data_corr, mask=data_corr < 1, cbar=False)\n",
    "\n",
    "plt.savefig('diabete_coor.png' )\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pregnancies and Age = 0.54\n"
     ]
    }
   ],
   "source": [
    "#Set the threshold to select only highly correlated attributes\n",
    "threshold = 0.5\n",
    "# List of pairs along with correlation above threshold\n",
    "corr_list = []\n",
    "#size = data.shape[1]\n",
    "size = data_corr.shape[0]\n",
    "\n",
    "#Search for the highly correlated pairs\n",
    "for i in range(0, size): #for 'size' features\n",
    "    for j in range(i+1,size): #avoid repetition\n",
    "        if (data_corr.iloc[i,j] >= threshold and data_corr.iloc[i,j] < 1) or (data_corr.iloc[i,j] < 0 and data_corr.iloc[i,j] <= -threshold):\n",
    "            corr_list.append([data_corr.iloc[i,j],i,j]) #store correlation and columns index\n",
    "\n",
    "#Sort to show higher ones first            \n",
    "s_corr_list = sorted(corr_list,key=lambda x: -abs(x[0]))\n",
    "\n",
    "#Print correlations and column names\n",
    "for v,i,j in s_corr_list:\n",
    "    print (\"%s and %s = %.2f\" % (cols[i],cols[j],v))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "除怀孕次数和年龄相关之外，其余变量相互比较独立。这里有个疑问，这数据统计的全是女性?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 从原始数据中分离输入特征x和输出y\n",
    "y = data['Outcome'].values\n",
    "X = data.drop('Outcome', axis = 1)\n",
    "\n",
    "#用于后续显示权重系数对应的特征\n",
    "columns = X.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面将训练数据分割成训练集和测试集，用train_test_split从训练集中随机分出20%做测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(614, 8)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征工程、数据处理    这里是需要标准化的，对一些为0的数据（除怀孕次数之外）需要进行处理。（怎么处理比较合适?）\n",
    "注意：对y的处理，要使其值变为整型（.astype('int'），而不是连续数类型，不然会报错：Unknown label type: 'continuous'\n",
    "对样本数目不均等的问题，在这里不对样本进行处理（不采用过采样和欠采样），不调节样本权重，考虑到这是一个和诊断相关的问题，考虑在算法里采用代价敏感学习比较合适?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 分别初始化对特征和目标值的标准化器\n",
    "ss_X = StandardScaler()\n",
    "#ss_y = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征以及目标值进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.transform(X_test)\n",
    "\n",
    "#对y做标准化不是必须\n",
    "#对y标准化的好处是不同问题的w差异不太大，同时正则参数的范围也有限\n",
    "#y_train = ss_y.fit_transform(y_train.reshape(-1, 1))\n",
    "#y_test = ss_y.transform(y_test.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Logistic回归："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
      "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
      "          verbose=0, warm_start=False)\n"
     ]
    }
   ],
   "source": [
    "lr=LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,\n",
    "                     class_weight=None,random_state=None,solver='liblinear',max_iter=100,multi_class=\"ovr\",\n",
    "                     verbose=0,warm_start=False,n_jobs=1)\n",
    "lr.fit(X_train,y_train.astype('int'))\n",
    "print (lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is [0.47827359 0.48701169 0.53769827 0.5011592  0.45283793]\n",
      "cv logloss is 0.49139613545376404\n"
     ]
    }
   ],
   "source": [
    "from sklearn.cross_validation import cross_val_score\n",
    "c, r = y_train.shape,0\n",
    "y_train = y_train.reshape(c,)\n",
    "#以上两句是为了避免下一句运行时出现“too many indices for array”错误\n",
    "loss=cross_val_score(lr,X_train,y_train.astype('int'),cv=5,scoring='neg_log_loss')\n",
    "print ('logloss of each fold is', -loss)\n",
    "print ('cv logloss is', -loss.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "正则化的logistic回归及参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 0.18, 0.5, 1.0, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "penaltys=['l1','l2']\n",
    "Cs=[0.001,0.01,0.1,0.18,0.5,1.0,10,100,1000]\n",
    "tuned_parameters=dict(penalty=penaltys,C=Cs)\n",
    "\n",
    "lr_penalty=LogisticRegression()\n",
    "grid=GridSearchCV(lr_penalty,tuned_parameters,cv=5,scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train.astype('int'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00100083, 0.00099626, 0.00100222, 0.00098734, 0.00099797,\n",
       "        0.00120339, 0.00141497, 0.0009963 , 0.00120282, 0.00099249,\n",
       "        0.00120301, 0.00099416, 0.00100865, 0.0010016 , 0.00120335,\n",
       "        0.00100279, 0.00100241, 0.00100269]),\n",
       " 'std_fit_time': array([2.59164395e-06, 1.13599385e-05, 7.62939453e-07, 1.92132833e-05,\n",
       "        8.55972506e-06, 4.01330118e-04, 4.94616875e-04, 1.00231125e-05,\n",
       "        4.00186476e-04, 1.26225920e-05, 4.01163115e-04, 1.05200695e-05,\n",
       "        1.03206333e-05, 6.21719590e-07, 3.98504068e-04, 3.47470030e-06,\n",
       "        7.92181383e-07, 2.83948420e-06]),\n",
       " 'mean_score_time': array([0.0010035 , 0.00100288, 0.00040116, 0.00101452, 0.00060163,\n",
       "        0.00100279, 0.00040116, 0.00060186, 0.00040193, 0.00040193,\n",
       "        0.        , 0.00060754, 0.        , 0.00020566, 0.00040107,\n",
       "        0.00099821, 0.00100179, 0.00079675]),\n",
       " 'std_score_time': array([6.33622357e-04, 9.60800251e-07, 4.91322457e-04, 1.41198560e-05,\n",
       "        4.91225171e-04, 6.34069879e-04, 4.91323151e-04, 4.91420348e-04,\n",
       "        4.92258526e-04, 4.92258156e-04, 0.00000000e+00, 4.96172249e-04,\n",
       "        0.00000000e+00, 4.11319733e-04, 4.91223153e-04, 1.13085830e-05,\n",
       "        2.65662923e-06, 3.98602735e-04]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 0.18, 0.18, 0.5,\n",
       "                    0.5, 1.0, 1.0, 10, 10, 100, 100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 0.18, 'penalty': 'l1'},\n",
       "  {'C': 0.18, 'penalty': 'l2'},\n",
       "  {'C': 0.5, 'penalty': 'l1'},\n",
       "  {'C': 0.5, 'penalty': 'l2'},\n",
       "  {'C': 1.0, 'penalty': 'l1'},\n",
       "  {'C': 1.0, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.64606202, -0.67955485, -0.53434191, -0.4850496 ,\n",
       "        -0.48185604, -0.4813871 , -0.47957725, -0.47916076, -0.47842032,\n",
       "        -0.47856189, -0.47827359, -0.47825691, -0.47823587, -0.47824051,\n",
       "        -0.47823772, -0.47824549, -0.47823797]),\n",
       " 'split1_test_score': array([-0.69314718, -0.64425938, -0.67184964, -0.52981328, -0.48653073,\n",
       "        -0.48479583, -0.48359161, -0.48475712, -0.48506872, -0.48621341,\n",
       "        -0.48627073, -0.48701169, -0.48784612, -0.48793413, -0.48803309,\n",
       "        -0.48803856, -0.48804674, -0.48804913]),\n",
       " 'split2_test_score': array([-0.69314718, -0.65386926, -0.67077616, -0.56406457, -0.52684984,\n",
       "        -0.53022024, -0.52894102, -0.5320027 , -0.53466329, -0.53591264,\n",
       "        -0.53711376, -0.53769827, -0.53937399, -0.5396845 , -0.53986951,\n",
       "        -0.53990625, -0.53991889, -0.53992867]),\n",
       " 'split3_test_score': array([-0.69314718, -0.64602323, -0.66986522, -0.54084328, -0.50836044,\n",
       "        -0.50077373, -0.50242147, -0.50019967, -0.50040574, -0.5007454 ,\n",
       "        -0.50062937, -0.5011592 , -0.50160501, -0.50166702, -0.50171819,\n",
       "        -0.50172587, -0.50173   , -0.50173184]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64166836, -0.67223151, -0.51567585, -0.47710063,\n",
       "        -0.45618104, -0.46289101, -0.45382687, -0.45541582, -0.45285982,\n",
       "        -0.45401271, -0.45283793, -0.4530582 , -0.45295238, -0.45298273,\n",
       "        -0.4529719 , -0.45297514, -0.45297394]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64638418, -0.67287228, -0.53697183, -0.49677233,\n",
       "        -0.49079089, -0.49185934, -0.49009817, -0.49096613, -0.4908558 ,\n",
       "        -0.49134251, -0.49142166, -0.49205349, -0.49212037, -0.49219439,\n",
       "        -0.49220166, -0.49220886, -0.49220991]),\n",
       " 'std_test_score': array([0.        , 0.00407353, 0.00346216, 0.01586808, 0.01826374,\n",
       "        0.02434281, 0.02236527, 0.02572006, 0.02620013, 0.02735917,\n",
       "        0.02741986, 0.02797235, 0.02847517, 0.02861094, 0.02866436,\n",
       "        0.02868016, 0.02868277, 0.02868714]),\n",
       " 'rank_test_score': array([18, 16, 17, 15, 14,  2,  7,  1,  4,  3,  5,  6,  8,  9, 10, 11, 12,\n",
       "        13]),\n",
       " 'split0_train_score': array([-0.69314718, -0.64521361, -0.68233471, -0.5305961 , -0.48319298,\n",
       "        -0.47591953, -0.47608771, -0.47346559, -0.47260753, -0.47217698,\n",
       "        -0.47210816, -0.47199711, -0.47193329, -0.47193217, -0.47193148,\n",
       "        -0.47193147, -0.47193146, -0.47193146]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64570283, -0.67101544, -0.53005178, -0.48198508,\n",
       "        -0.4725059 , -0.47300245, -0.46976165, -0.46876471, -0.46828873,\n",
       "        -0.46819944, -0.46807913, -0.46800393, -0.46800273, -0.46800191,\n",
       "        -0.4680019 , -0.46800189, -0.46800189]),\n",
       " 'split2_train_score': array([-0.69314718, -0.64078789, -0.66844795, -0.5208789 , -0.47079556,\n",
       "        -0.46403524, -0.46336209, -0.46121914, -0.45998096, -0.45966815,\n",
       "        -0.45955642, -0.45944203, -0.45936071, -0.45935866, -0.45935777,\n",
       "        -0.45935775, -0.45935774, -0.45935774]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64461697, -0.6660006 , -0.52656951, -0.47881695,\n",
       "        -0.46974319, -0.47009439, -0.46715136, -0.46622167, -0.46577872,\n",
       "        -0.46571683, -0.46558565, -0.46551704, -0.46551572, -0.46551498,\n",
       "        -0.46551497, -0.46551496, -0.46551496]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64718006, -0.67272744, -0.53562496, -0.48922185,\n",
       "        -0.48042214, -0.48105852, -0.47783565, -0.47688849, -0.47645638,\n",
       "        -0.47637014, -0.47626132, -0.47619159, -0.47619048, -0.47618974,\n",
       "        -0.47618972, -0.47618972, -0.47618972]),\n",
       " 'mean_train_score': array([-0.69314718, -0.64470027, -0.67210523, -0.52874425, -0.48080248,\n",
       "        -0.4725252 , -0.47272103, -0.46988668, -0.46889267, -0.46847379,\n",
       "        -0.4683902 , -0.46827305, -0.46820131, -0.46819995, -0.46819918,\n",
       "        -0.46819916, -0.46819915, -0.46819915]),\n",
       " 'std_train_score': array([0.        , 0.00213221, 0.00560106, 0.00488009, 0.00603456,\n",
       "        0.00554441, 0.00592312, 0.00563238, 0.00573241, 0.00569688,\n",
       "        0.00570476, 0.00570838, 0.00571266, 0.00571298, 0.00571303,\n",
       "        0.00571303, 0.00571303, 0.00571303])}"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.49009816882199775\n",
      "{'C': 0.18, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#CV误差曲线\n",
    "test_means=grid.cv_results_['mean_test_score']\n",
    "test_stds=grid.cv_results_['std_test_score']\n",
    "train_means=grid.cv_results_['mean_train_score']\n",
    "train_stds=grid.cv_results_['std_train_score']\n",
    "#结果\n",
    "n_Cs=len(Cs)\n",
    "number_penaltys=len(penaltys)\n",
    "test_scores=np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores=np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds=np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds=np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis=np.log10(Cs)\n",
    "for i,value in enumerate(penaltys):\n",
    "    plt.errorbar(x_axis,test_scores[:,i],yerr=test_stds[:,i],label=penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis,train_scores[:,i],yerr=train_stds[:,i],label=penaltys[i] +' Train')\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg_logloss')\n",
    "plt.savefig('LogistcGridSearchCV_C.png')\n",
    "plt.show()\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用LogisticRegressionCV实现正则化的Logistic回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.1, 1.0, 10, 100], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "Cs=[0.1,1.0,10,100]\n",
    "lrcv_L2=LogisticRegressionCV(Cs=Cs,cv=5,scoring='neg_log_loss',penalty='l2',\n",
    "                             solver='liblinear',multi_class=\"ovr\")\n",
    "lrcv_L2.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.48185604, -0.47827359, -0.47823587, -0.47823772],\n",
       "        [-0.48479583, -0.48701169, -0.48793413, -0.48803856],\n",
       "        [-0.53022024, -0.53769827, -0.5396845 , -0.53990625],\n",
       "        [-0.50077373, -0.5011592 , -0.50166702, -0.50172587],\n",
       "        [-0.45618104, -0.45283793, -0.45295238, -0.4529719 ]])}"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_Cs = len(Cs)\n",
    "n_classes = 2\n",
    "scores =  np.zeros((n_classes,n_Cs))\n",
    "\n",
    "for j in range(1,n_classes):\n",
    "        scores[j][:] = np.mean(lrcv_L2.scores_[j],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "plt.plot(np.log10(Cs),mse_mean.reshape(n_Cs,1))\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg_logloss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "SVM             导入必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.svm import LinearSVC\n",
    "#SVM不能直接输出各类的概率，所以用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "default SVC       线性SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.79      0.90      0.84        99\n",
      "          1       0.76      0.56      0.65        55\n",
      "\n",
      "avg / total       0.78      0.78      0.77       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[89 10]\n",
      " [24 31]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train, y_train)\n",
    "y_predict = SVC1.predict(X_test)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\" \n",
    "      %(SVC1, classification_report(y_test, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % confusion_matrix(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面的混淆矩阵来看，误判率还是有点高。尤其是55个患病者中，有24个判定为无病，这个误判率有点高。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7662337662337663\n",
      "accuracy: 0.7467532467532467\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_test, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('SVM_Diabete.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "径向基核SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    # 在训练集上利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6558441558441559\n",
      "accuracy: 0.7922077922077922\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6558441558441559\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7987012987012987\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6558441558441559\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7922077922077922\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n",
      "accuracy: 0.6428571428571429\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-5, 3, 9)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_test, y_test)\n",
    "        accuracy_s.append(tmp)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7922077922077922\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.7012987012987013\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7922077922077922\n",
      "accuracy: 0.7467532467532467\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7922077922077922\n",
      "accuracy: 0.8051948051948052\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7012987012987013\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7987012987012987\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.7467532467532467\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7337662337662337\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.6753246753246753\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(1, 2, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-1.5, 0, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_test, y_test)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/OWXXy7vv/9+h48bP368bNiw4biuWV9fLykpKdLQ0HBcx58svvzyS/nzn//c6r6NGzfKyJEjpa6uTrZv3y4DBgwQm812RLuKigrn77fccos88cQTR7R5+umn5frrrxcREavVKsHBwe2Kryt+HjUajKkMx7zHtrdncQtQDywG3gFqaDnjWnMCfPbZZ4wdO5b09HRmzpzp/DY7Z84ckpOTSUlJ4e677+aHH37g008/5fbbbz+uXkkjb7/9NiNGjGD48OHce++9zu0vv/wygwYNclp933bbbQCtWpSnpKQwbtw45syZ41xQKS8vj4kTJzJy5EhGjRrldJz98ssvne6wAwcO5P777+fNN99kzJgxpKSkOF/H7Nmzuemmmzj11FPp378/33//PVdddRVDhgxpMYP8hhtuYPTo0QwbNoy5c+c6t0+ePJnPP/8cm61p+c9GPvzwQ2bNmoWXlxf9+/cnPj6edevWHdEuKMgw7rPb7dTW1rY6cWrhwoXMmjWrQ++5RtPtaY+idIdHd+1Z7NmzRyZNmiRVVVUiIvLII4/Io48+KiUlJZKcnCx2u11ERA4cOCAiJ96zKCgokH79+sm+ffukvr5eJk2aJB999JHs2rVLEhISpKysTOrq6mTs2LFy6623iojIvffeKy+++KLzXEOGDJHs7GwREbnzzjslNTVVRESqqqqkpqZGRER++eUXycjIEBGR5cuXS2hoqJSUlEhNTY1ER0fLww8/LCIiTz75pNx5553O13b55ZeLiMiSJUskKChIcnNzxWazSWpqqmzevFlEREpLS0XE+FY/YcIEyc3NdcY2efJkycnJOeL1/+lPf5KFCxc6n1955ZVtvo9XXHGFREZGymmnnSbV1dUt9uXl5UlMTIyzV2K1WsXDw0PS09MlKytLli1b1ubfoCt+HjUa2tmzaG811HLgYhEpdzwPxZh1PdWFOtaplDz2GHW/dK5FuffQIfRp9s38eNAW5V3LohzgzTffxGazceONN/Luu+9y5ZVXOvctXLiQSy65xOkrZTab2blzJzExMWzfvp3TTjuNESNGHNeiVBpNV6a9w1ARjUIBICIH0GtwdwrisCjPyckhJyeHLVu2MH/+fKez6/nnn897773nNPtri/r6emeStfnQTGvX68h26LhF+ebNm1m9ejV1dXXOfZ1tUf7111+zadMmpk2b1qZFeeP7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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Diabete.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
